怎么让重载的“<<”实现动态绑定?

来源:百度知道 编辑:UC知道 时间:2024/09/28 15:03:06
小的定义了了两个类一个Point、另一个是继承Point 的 Circle类现在可以实现用<<输出Point了,但现在想对<<实现类似多态的功能....就是动态实现输出.....遇到了很大的问题....解决了我再追加分.....我的代码如下: 先谢谢了.....

#include "stdafx.h"
#include <iostream>

using namespace std;

template<typename T>
class Point{
public:
Point (T a=0,T b=0):x(a),y(b){}
explicit Point (const Point & p):x(p.x),y(p.y){}

T get_x() const{return x;}
T get_y() const{return y;}

void move(T c,T d){x+=c;y+=d;}
friend const Point<T>& operator+(const Point<T>& p1,const Point<T>& p2);
friend ostream& operator<< <> (ostream& out,const Point<T>& p);

private:
T x,y;
};

template<typename T>
class Circle:public Point<T>{
public:
Circle (T a,T c,T d):Point<T>(a,c),r(d){}
explicit Circle (Circle& c):Point<T>(c.get_x() ,c.get_y()),r(c.r){};

T get_r()

用虚函数, 但运算符不能声明为虚. 下面是改了你的代码,实现动态编联

#include "stdafx.h"

#include <iostream>

using namespace std;

template<typename T>
class Point{
public:
Point (T a=0,T b=0):x(a),y(b){}
explicit Point (const Point & p):x(p.x),y(p.y){}

T get_x() const{return x;}
T get_y() const{return y;}

void move(T c,T d){x+=c;y+=d;}
friend const Point<T>& operator+(const Point<T>& p1,const Point<T>& p2);
friend ostream& operator<< <> (ostream& out,Point<T>& p);
/*声明一个虚函数,实现<<功能, 注意这里没有声明为纯虚函数,所以一定要写出函数的实现*/
virtual void Output(ostream& out){out << get_x()<<" "<<get_y()<<" "<< endl; }

private:
T x,y;
};

template<typename T>
class Circle:public Point<T>{
public:
Circle (T a,T c,T d):Point<T>(a,c),r(d){}
exp